package com.tools.service.workflow;

import com.tools.pojo.workflow.bo.NodeExecutionResult;
import com.tools.pojo.workflow.po.FlowInstance;
import com.tools.pojo.workflow.po.FlowTransition;

import java.util.List;
import java.util.Map;

public interface FlowRouterService {

    /**
     * 获取下一个节点编码
     * @param flowInstance 流程实例
     * @param currentNodeCode 当前节点编码
     * @param transitionMap 节点转换映射
     * @param currentResult 当前节点执行结果
     * @return 下一个节点编码
     */
    String getNextNode(FlowInstance flowInstance, String currentNodeCode,
                       Map<String, List<FlowTransition>> transitionMap,
                       NodeExecutionResult currentResult);

    /**
     * 解析上下文数据JSON字符串为Map
     * @param contextDataJson 上下文数据JSON字符串
     * @return 解析后的上下文数据Map
     */
    Map<String, Object> parseContextData(String contextDataJson);

     /**
      * 获取所有可能的下一个节点编码
      * @param flowInstance 流程实例
      * @param currentNodeCode 当前节点编码
      * @param transitionMap 节点转换映射
      * @return 所有可能的下一个节点编码列表
      */
    List<String> getAllNextNodes(FlowInstance flowInstance, String currentNodeCode,
                                 Map<String, List<FlowTransition>> transitionMap);


     /**
      * 验证节点路由是否存在
      * @param flowInstance 流程实例
      * @param sourceNode 源节点编码
      * @param targetNode 目标节点编码
      * @param transitionMap 节点转换映射
      * @return 是否存在有效路由
      */
    boolean validateNodeRoute(FlowInstance flowInstance, String sourceNode, String targetNode,
                              Map<String, List<FlowTransition>> transitionMap);
}
